//
//  TDOAuthViewController.swift
//  微博
//
//  Created by tong dan on 16/3/3.
//  Copyright © 2016年 tong dan. All rights reserved.
//

import UIKit
import SVProgressHUD

// APPKEY
let WB_CLIENT_ID = "3626044213"
// 回调页
let WB_REDIRECT_URI = "http://www.itheima.com/"
//http://www.itheima.com/

//WB_CLIENT_SECRET
let WB_CLIENT_SECRET = "11ab014653ca1c0ddd8ae4c40a0bf744"
class TDOAuthViewController: UIViewController {
    
    private lazy var webView: UIWebView = {
        
        let webView = UIWebView()
        
        webView.delegate = self
        
        return webView
        
    }()
    
    override func loadView() {
        
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        
        //加载url
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(WB_CLIENT_ID)&redirect_uri=\(WB_REDIRECT_URI)"
        
        //初始化url
        let url = NSURL(string:urlString)
        
        //初始化request
        let request = NSURLRequest(URL: url!)
        
        //加载这个请求
        webView.loadRequest(request)
        
    }
    
    private func setupUI(){
        
        navigationItem.title = "新浪微博"
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: "cancel")
        
        // 设置自动填充帐号和密码
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: "autoFill")
        
        
    }
    
    
    @objc private func cancel(){
        
        dismissViewControllerAnimated(true, completion: nil)
        
        
    }
    
    
    @objc private func autoFill(){
        
        
        let jsString = "document.getElementById('userId').value='yohtr35601@163.com';document.getElementById('passwd').value='qw1987'"
        
        webView.stringByEvaluatingJavaScriptFromString(jsString)
        
        
    }
    
    
    
}



// webViewdelegate
// extension类似于OC中的类

extension TDOAuthViewController: UIWebViewDelegate {
    
    //当 webView　将要去加载某个网页（请求）的时候，会回调这个方法，来判断是否要去加载这个网页
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //判断是否为空
        guard let url = request.URL else{
            
            return true
            
        }
        //判断地址到字符串是否是以回调页开头
        if !url.absoluteString.hasPrefix(WB_REDIRECT_URI){
            
            return true
            
        }
        
        let query = url.query!
        // 当发现 query 不是以 code= 开头,直接返回 true 让其继续加载
        if !query.hasPrefix("code="){
            
            return true
            
        }
        let code = query.substringFromIndex("code=".endIndex)
        print("获取回来的code是:\(code)")
        
        TDUserAccountViewModel.shareViewModel.loadAccessToken(code) { (isSuccess) -> () in
            if isSuccess{
            
                //跳转欢迎界面
            print("登录成功，跳转界面")
            self.dismissViewControllerAnimated(false, completion: { () -> Void in
                
                NSNotificationCenter.defaultCenter().postNotificationName(TDSwitchRootVCNotification, object: self)
            })
            }else{
            
             SVProgressHUD.showErrorWithStatus("登录失败")
            
            }
        }
        return false
        
    }
    
    
    
    
    //开始加载
    func webViewDidStartLoad(webView: UIWebView){
        
        SVProgressHUD.show()
        
    }
    
    //结束加载
    func webViewDidFinishLoad(webView: UIWebView) {
        
        SVProgressHUD.dismiss()
    }
}


// 以下代码抽取到 `HMUserAccountViewModel` 里面去
////网络请求
//extension TDOAuthViewController{
//    
//    private func loadAccessToken(code:String){
//        
//        //请求地址
//        let urlString = "https://api.weibo.com/oauth2/access_token"
//        /*
//        
//        client_id	true	string	申请应用时分配的AppKey。
//        client_secret	true	string	申请应用时分配的AppSecret。
//        grant_type	true	string	请求的类型，填写authorization_code
//        
//        grant_type为authorization_code时
//        必选	类型及范围	说明
//        code	true	string	调用authorize获得的code值。
//        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
//        */
//        
//        //请求参数
//        
//        let params = [
//            
//            "client_id":WB_CLIENT_ID,
//            "client_secret":WB_CLIENT_SECRET,
//            "grant_type":"authorization_code",
//            "code":code,
//            "redirect_uri":WB_REDIRECT_URI
//            
//        ]
//        
//        //发送请求
//        TDNetworkTools.sharedTools.request(.POST, urlString: urlString, parameters: params) { (response, error) -> () in
//            if error != nil{
//                
//                print(error)
//                return
//            }
//            
//            print(response)
//            //判断返回数据是否是字典
//            guard let dict = response as? [String:AnyObject] else {
//                
//                print("返回的数据不是字典")
//                
//                return
//            }
//            
//            //字典转模型
//            let account = TDUserAccount(dict: dict)
//            print(account)
//            
//            //加载用户信息
//            self.loadUserInfo(account)
//        }
//        
//    }
//    
//    
//    //请求用户信息
//    private func loadUserInfo(account:TDUserAccount){
//        
//        let urlString = "https://api.weibo.com/2/users/show.json"
//        
//        let params = [
//            
//            "access_token": account.access_token!,
//            "uid":account.uid!
//            
//        ]
//        
//        //发送请求
//        TDNetworkTools.sharedTools.request( urlString: urlString, parameters:params) { (response, error) -> () in
//            if error != nil {
//                
//                //错误信息可以不提示给用户，但是一定要在开发中输出
//                print(error)
//                SVProgressHUD.showErrorWithStatus("网络异常")
//                
//                return
//                
//            }
//            print(response)
//            
//            guard let dict = response as? [String: AnyObject] else {
//            
//            return
//            }
//            
//            //取到用户的昵称与头像地址，设置到userAccount的模型中
//            account.avatar_large = dict["avatar_large"] as? String
//            account.screen_name = dict["screen_name"] as? String
//            
//            //保存数据的逻辑
//            print(account)
//            
//            //1.获取文档路径
//            let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
//            
//            print(path)
//            
//            //2.NSKeyedArchiver
//            NSKeyedArchiver.archiveRootObject(account, toFile: path)
//        }
//        
//    
//    }
//}
